<?php

include_once('classes/Viagem.class.php');
include_once('classes/Cliente.class.php');

class PassagemController extends Controller {
    
    public function __construct() {
        parent::__construct('PASSAGEM');
    }
    
    public function index(){
        Util::redirectTo('');
    }
    
    public function Buy(){
        $ArGET = Util::getParameters();
        $Step = isset($ArGET['Step']) ? $ArGET['Step'] : '1';
        switch($Step){
            case '1': $this->Step1(); break;
            case '2': $this->Step2(); break;
            case '3': $this->Step3(); break;
            case '4': $this->Step4(); break;
            default: $this->Step1(); break;
        }
    }
    
    private function Step1(){
        $ArGET = Util::getParameters();
        if(!isset($ArGET['IDViagem']) || empty($ArGET['IDViagem'])){
            SessionHelper::saveMessage('É necessário selecionar uma viagem.', 'error');
            Util::returnPage();
            return;
        }
        $this->save('Viagem', ViagemModel::GetByID($ArGET['IDViagem']));
        $this->save('PoltronasCompradas', ViagemModel::GetPoltronasCompradas($ArGET['IDViagem']));
        SessionHelper::addJavascripts('comprar_passagem.js');
        $this->view('compra_passagem_details');
    }
    
    private function Step2(){
        if((!isset($_POST['IDViagem']) || empty($_POST['IDViagem'])) ||
                !isset($_POST['PoltronasSelecionadas']) || empty($_POST['PoltronasSelecionadas'])){
            SessionHelper::saveMessage('Ocorreu um erro na escolha da passagem. Por favor, tente novamente.', 'error');
            Util::returnPage();
            return;
        }
        SessionHelper::saveSession('PoltronasSelecionadas', $_POST['PoltronasSelecionadas']);
        SessionHelper::saveSession('ViagemSelecionada', ViagemModel::GetByID($_POST['IDViagem']));
        if(SessionHelper::existsSession('ClienteLogado')){
            Util::redirectTo('Passagem/Buy/Step/3');
            return;
        } else
            Util::redirectTo('Cliente/Login/ReturnURL/' . base64_encode('Passagem/Buy/Step/3'));
    }
    
    private function Step3(){
        if(!$this->verifySessionBuyInformation()){
            return;
        }
        $this->view('compra_passagem_pgto');
    }
    
    private function Step4(){
        if(!$this->verifySessionBuyInformation()){
            return;
        }
        $message = '';
        $sucesso = true;
        if(empty($_POST['tipo_pagamento']))
            $message = 'Escolha o tipo de pagamento.';
        else if(empty($_POST['nomeTitular']))
            $message = 'Nome do titular inválido.';
        else if(empty($_POST['numCartao']))
            $message = 'Número do cartão inválido.';
        else if(empty($_POST['mesValidade']) || empty($_POST['anoValidade']))
            $message = 'Validade do cartão inválida.';
        else if(empty($_POST['codigoSeguranca']))
            $message = 'Código de segurança inválido.';
        else if($_POST['termosDeUso'] == 'aceitei')
            $message = 'É preciso aceitar os termos de uso para continuar.';
        
        if(empty($message)){
            SessionHelper::saveMessage($message, 'error');
            Util::returnPage();
            return false;
        }
        
        $sucesso = PagamentoModel::registerCreditCardPayment($_POST['tipo_pagamento'], $_POST['nomeTitular'], 
                    $_POST['numCartao'], $_POST['mesValidade'], $_POST['anoValidade'], $_POST['codigoSeguranca']);
      
        $Cliente = SessionHelper::getSession('ClienteLogado');
        $Viagem = SessionHelper::getSession('ViagemSelecionada');
        $PoltronasSelecionadas = SessionHelper::getSession('PoltronasSelecionadas');
        
        if($sucesso === true){
            PassagemModel::RegistrarCompraPassagens($Cliente, $Viagem, explode(',', $PoltronasSelecionadas));
            SessionHelper::saveMessage('Pagamento confirmado. Obrigado pela preferência e boa viagem.');
            Util::redirectTo('Cliente/MyAccount');
            return;
        } else {
            SessionHelper::saveMessage('Dados do cartão inválidos. Por favor, verifique novamente.');
            Util::returnPage();
            return;
        }
        
    }
    
    private function verifySessionBuyInformation(){
        $Viagem = SessionHelper::getSession('ViagemSelecionada');
        $PoltronasSelecionadas = SessionHelper::getSession('PoltronasSelecionadas');
        if(empty($Viagem) || empty($PoltronasSelecionadas)){
            SessionHelper::saveMessage('Ocorreu um erro na escolha da passagem. Por favor, tente novamente.', 'error');
            Util::returnPage();
            return false;
        }
        return true;
    }
    
    public function BuyConfirmation(){
        SessionHelper::deleteSession('ViagemSelecionada');
        SessionHelper::deleteSession('PoltronasSelecionadas');
        $this->view('compra_passagem_confirm');
    }
}

?>
